perm filename MIDTER.EXP[206,JMC] blob sn#280569 filedate 1977-05-03 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	The reason FEXPRS should be ignored when writing Frees is illustrated by QUOTE.
C00004 ENDMK
CāŠ—;
The reason FEXPRS should be ignored when writing Frees is illustrated by QUOTE.
If the expression "(QUOTE X)" appeared, the simple-minded version of Frees will
report x as a free variable (assuming it hasn't been bound). To "fix" Frees so
it wouldn't make this mistake, you could rule out the args of QUOTE. But then
two other problems arise.

1. Suppose you encounter "(MaybeQuote X)" where maybequote is a fexpr that under
certain conditions defined by free variables quotes its argument and other times
evaluates it. What then ?

2. Suppose the previously mentioned reference to "(QUOTE X)" occurred in the
following context: "(APPLY FOO (QUOTE X))".  In this case we see that X is in
fact a candidate for being a free variable, and must be considered.

The general tendency displayed by these examples hints of the opening of a whole
can of worms, and the impression is correct. The general question of whether an
arbitrary variable will be evaluated is as hard as the question of whether an
arbitrary program will halt; i.e. it is undecidable.